{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-elasticsearch-http-read-only",
      "artifactVersion": "2021.26.5",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.elasticsearch.audit",
          "org.nuxeo.elasticsearch.automation",
          "org.nuxeo.elasticsearch.core",
          "org.nuxeo.elasticsearch.http.readonly",
          "org.nuxeo.elasticsearch.rest",
          "org.nuxeo.elasticsearch.seqgen",
          "org.nuxeo.elasticsearch.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.elasticsearch",
        "id": "grp:org.nuxeo.elasticsearch",
        "name": "org.nuxeo.elasticsearch",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "nuxeo-elasticsearch\n===================\n\n## About\n\nThis project aims at providing Nuxeo bundles to integrate\nElasticsearch with the Nuxeo Platform.\n\nThe idea is to index/query Nuxeo Documents to/from Elasticsearch.\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\n\n## Running tests\n\n### Using the embedded Elasticsearch\n\nWith the default `RestClient`:\n```bash\nmvn -nsu test\n# -Dnuxeo.test.elasticsearch.client=RestClient is set by default\n```\n\nOr with the `TransportClient`\n\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient\n```\n\n### Using an external Elasticsearch\n\n1. Start an Elasticsearch using docker:\n```bash\ndocker run -p 9400:9200 -p 9600:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.5.3\n```\n\n2.a Run the test with `RestClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.addressList=http://localhost:9400\n```\n\n2.b Or run the test with `TransportClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient -Dnuxeo.test.elasticsearch.clusterName=docker-cluster -Dnuxeo.test.elasticsearch.addressList=localhost:9600\n```\n\n## Links\n\n- Administration: http://doc.nuxeo.com/x/UBY5AQ\n- Configuring mapping: http://doc.nuxeo.com/x/WxI5AQ\n- Overview: http://doc.nuxeo.com/x/iYElAQ\n- [Open jira tikets](https://jira.nuxeo.com/issues/?jql=project%20%3D%20NXP%20AND%20component%20%3D%20Elasticsearch%20AND%20Status%20!%3D%20%22Resolved%22%20ORDER%20BY%20updated%20DESC%2C%20priority%20DESC%2C%20created%20ASC)\n",
            "digest": "39fe49f5b0c4b24c62cb008ba470a7c5",
            "encoding": "UTF-8",
            "length": 1513,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2021.26"
      },
      "bundleId": "org.nuxeo.elasticsearch.http.readonly",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.elasticsearch.http.readonly.service.RequestFilterService",
          "documentation": "\n    Service to declare and apply request filter on es request.\n  \n",
          "documentationHtml": "<p>\nService to declare and apply request filter on es request.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.elasticsearch.http.readonly.RequestFilterService",
              "descriptors": [
                "org.nuxeo.elasticsearch.http.readonly.service.RequestFilterDescriptor"
              ],
              "documentation": "\n      This extension can be used to register new filters\n    \n",
              "documentationHtml": "<p>\nThis extension can be used to register new filters\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.http.readonly/org.nuxeo.elasticsearch.http.readonly.RequestFilterService/ExtensionPoints/org.nuxeo.elasticsearch.http.readonly.RequestFilterService--filters",
              "id": "org.nuxeo.elasticsearch.http.readonly.RequestFilterService--filters",
              "label": "filters (org.nuxeo.elasticsearch.http.readonly.RequestFilterService)",
              "name": "filters",
              "version": "2021.26.5"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.http.readonly/org.nuxeo.elasticsearch.http.readonly.RequestFilterService",
          "name": "org.nuxeo.elasticsearch.http.readonly.RequestFilterService",
          "requirements": [],
          "resolutionOrder": 190,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.elasticsearch.http.readonly.RequestFilterService",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.http.readonly/org.nuxeo.elasticsearch.http.readonly.RequestFilterService/Services/org.nuxeo.elasticsearch.http.readonly.service.RequestFilterService",
              "id": "org.nuxeo.elasticsearch.http.readonly.service.RequestFilterService",
              "overriden": false,
              "version": "2021.26.5"
            }
          ],
          "startOrder": 886,
          "version": "2021.26.5",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.elasticsearch.http.readonly.RequestFilterService\" version=\"1.0.0\">\n   <documentation>\n    Service to declare and apply request filter on es request.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.elasticsearch.http.readonly.service.RequestFilterService\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.elasticsearch.http.readonly.service.RequestFilterService\"/>\n  </service>\n\n  <extension-point name=\"filters\">\n    <documentation>\n      This extension can be used to register new filters\n    </documentation>\n    <object class=\"org.nuxeo.elasticsearch.http.readonly.service.RequestFilterDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/request-filter-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.elasticsearch.http.readonly.RequestFilterService--filters",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.http.readonly/org.nuxeo.elasticsearch.http.readonly.audit.filter/Contributions/org.nuxeo.elasticsearch.http.readonly.audit.filter--filters",
              "id": "org.nuxeo.elasticsearch.http.readonly.audit.filter--filters",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.elasticsearch.http.readonly.RequestFilterService",
                "name": "org.nuxeo.elasticsearch.http.readonly.RequestFilterService",
                "type": "service"
              },
              "version": "2021.26.5",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.elasticsearch.http.readonly.RequestFilterService\">\n    <requestFilter filterClass=\"org.nuxeo.elasticsearch.http.readonly.filter.AuditRequestFilter\" index=\"audit\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.http.readonly/org.nuxeo.elasticsearch.http.readonly.audit.filter",
          "name": "org.nuxeo.elasticsearch.http.readonly.audit.filter",
          "requirements": [
            "org.nuxeo.elasticsearch.http.readonly.RequestFilterService"
          ],
          "resolutionOrder": 191,
          "services": [],
          "startOrder": 657,
          "version": "2021.26.5",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.http.readonly.audit.filter\" version=\"1.0\">\n\n  <require>org.nuxeo.elasticsearch.http.readonly.RequestFilterService</require>\n\n  <extension target=\"org.nuxeo.elasticsearch.http.readonly.RequestFilterService\"\n    point=\"filters\">\n    <requestFilter filterClass=\"org.nuxeo.elasticsearch.http.readonly.filter.AuditRequestFilter\"\n      index=\"audit\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/es-audit-http-readonly-filter.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-elasticsearch-http-read-only-2021.26.5.jar",
      "groupId": "org.nuxeo.elasticsearch",
      "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.http.readonly",
      "id": "org.nuxeo.elasticsearch.http.readonly",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: root\r\nBuild-Jdk: 11.0.16.1\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.elasticsearch.http.readonly\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Localization: bundle\r\nBundle-Name: Elasticsearch HTTP Read Only API\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.webengine.core,org.nuxeo.elasticsearch.c\r\n ore\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.elasticsearch.http.readonly;singleton:=\r\n true\r\nNuxeo-WebModule: org.nuxeo.ecm.webengine.app.WebEngineModule\r\nNuxeo-Component: OSGI-INF/request-filter-service.xml,OSGI-INF/es-audit\r\n -http-readonly-filter.xml\r\n\r\n",
      "maxResolutionOrder": 191,
      "minResolutionOrder": 190,
      "packages": [],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "nuxeo-elasticsearch\n===================\n\n## About\n\nThis project aims at providing Nuxeo bundles to integrate\nElasticsearch with the Nuxeo Platform.\n\nThe idea is to index/query Nuxeo Documents to/from Elasticsearch.\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\n\n## Running tests\n\n### Using the embedded Elasticsearch\n\nWith the default `RestClient`:\n```bash\nmvn -nsu test\n# -Dnuxeo.test.elasticsearch.client=RestClient is set by default\n```\n\nOr with the `TransportClient`\n\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient\n```\n\n### Using an external Elasticsearch\n\n1. Start an Elasticsearch using docker:\n```bash\ndocker run -p 9400:9200 -p 9600:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.5.3\n```\n\n2.a Run the test with `RestClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.addressList=http://localhost:9400\n```\n\n2.b Or run the test with `TransportClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient -Dnuxeo.test.elasticsearch.clusterName=docker-cluster -Dnuxeo.test.elasticsearch.addressList=localhost:9600\n```\n\n## Links\n\n- Administration: http://doc.nuxeo.com/x/UBY5AQ\n- Configuring mapping: http://doc.nuxeo.com/x/WxI5AQ\n- Overview: http://doc.nuxeo.com/x/iYElAQ\n- [Open jira tikets](https://jira.nuxeo.com/issues/?jql=project%20%3D%20NXP%20AND%20component%20%3D%20Elasticsearch%20AND%20Status%20!%3D%20%22Resolved%22%20ORDER%20BY%20updated%20DESC%2C%20priority%20DESC%2C%20created%20ASC)\n",
        "digest": "39fe49f5b0c4b24c62cb008ba470a7c5",
        "encoding": "UTF-8",
        "length": 1513,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": {
        "blobProviderId": "default",
        "content": "nuxeo-elasticsearch-http-read-only\n==================================\n\n## About\n\nThis addon exposes a limited set of Read Only Elasticsearch HTTP REST API, taking in account the Nuxeo authentication\nand authorization.\n\n\n## Building\n\n\n     mvn clean install\n\n\n## Requirements\n\n- An Elasticsearch instance with an [HTTP REST API](http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html),\n  the default port is 9200.\n- Deploy the `nuxeo-elasticsearch-http-read-only-VERSION.jar` into your Nuxeo server under `nxserver/bundles/`.\n- Configure the base URL to access the REST API, in the `nuxeo.conf` add:\n\n        elasticsearch.httpReadOnly.baseUrl = http://localhost:9200\n\n## Usage\n\nA Nuxeo webengine module acts as a proxy and provides:\n\n- The Nuxeo authentication: only valid Nuxeo user can access the REST API.\n- The Nuxeo ACL authorization, user can access only documents that they are allowed to see.\n- Limit access to Elasticsearch index (and types) defined inside Nuxeo.\n\nFor instance if your REST client application want to query Elasticsearch like this:\n\n    curl -XGET 'http://localhost:9200/_search?size=0' -d '{ \"query\": { \"match_all\":{}}}'\n\nTo do this search through Nuxeo, you need to change the base URL and use authentication:\n\n    curl -XGET -u jdoe:password  'http://localhost:8080/nuxeo/site/es/_search?size=0' -d '{ \"query\": { \"match_all\":{}}}'\n\nNote that the base URL change from **http://my-elastic-search-server:9200** to **http://my-nuxeo-server:8080/nuxeo/site/es**.\n\nThe previous request is rewritten and the final request submitted to Elasticsearch is equivalent to:\n\n    curl -XGET 'http://localhost:9200/nuxeo/doc/_search?size=0' -d '{\"query\":{\"bool\":{\"filter\":{\"terms\":{\"ecm:acl\":[\"members\",\"user1\",\"Everyone\"]}},\"must\":{\"match_all\":{}}}}}'\n\nWe can see that `index` and `type` have been explicitly set and the query has a filter to match the *jdoe* user ACL.\n\nNuxeo will submit only HTTP GET request to Elasticsearch, even if Nuxeo accepts search using HTTP POST.\n\nThe Document GET API is also filtered, for non Adminitrator user, there is a first request to retrieve the document ACL\nthen only if it is allowed the original request is forwarded.\n\n## REST API exposed\n\nOnly a small part of the API is exposed:\n\nThe Search APIs:\n\n- The [Request Body Search](http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html)\n- The [URI Search API](http://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html)\n\nThe Document APIs:\n\n- The [Get API](http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html)\n\n## Limitations\n\n### Request Body Search with POST request\n\nThe Elasticsearch Request Body Search API can be done using GET or POST request. The reason for this is that some\nclients are not able to send GET request with a body.\n\nThe Nuxeo proxy accepts POST request, but only if the content type is set properly, like this:\n\n    curl -XPOST -u jdoe:password -H \"Content-Type: application/json\" 'http://localhost:8080/nuxeo/site/es/_search?size=0' -d '{ \"query\": { \"match_all\":{}}}'\n\nIf you don't set this header you will get error like:\n\n    {\"entity-type\":\"exception\",\"code\":\"javax.ws.rs.WebApplicationException\",\"status\":500,\"message\":null}1\n\n### GET API with HEAD request\n\nThere is no HEAD request support at the moment.\n\n### GET API _source endpoint\n\nNo support for the /{index}/{type}/{id}/_source endpoint at the moment.\n\n## Links\n\n - Administration: http://doc.nuxeo.com/x/UBY5AQ\n",
        "digest": "62a8bf8d027ef2089d39549c02ec0a53",
        "encoding": "UTF-8",
        "length": 3510,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [
        "org.nuxeo.ecm.webengine.core",
        "org.nuxeo.elasticsearch.core"
      ],
      "version": "2021.26.5"
    }
  ],
  "creationDate": 1664794155250,
  "key": "Nuxeo Platform-2021.26",
  "name": "Nuxeo Platform",
  "operations": [],
  "packages": [],
  "pluginSnapshots": {},
  "releaseDate": 1663545600000,
  "version": "2021.26"
}